CSS: white-space
GPT-4.icon
normal
連続する空白文字(スペース、タブ、改行など)は1つのスペースとして扱われます。
テキストはコンテナの境界を超えると自動的に折り返されます。
nowrap
連続する空白文字は1つのスペースとして扱われます。
テキストは折り返されず、コンテナの境界を超えても一行に表示され続けます。
pre
連続する空白文字はそのままの形で表示されます(HTMLの <pre> タグのように)。
テキストは手動で挿入された改行やコンテナの境界でのみ折り返されます。
pre-wrap
連続する空白文字はそのままの形で表示されます。
テキストは手動で挿入された改行やコンテナの境界で折り返されます。
pre-line
連続する空白文字は1つのスペースとして扱われます。
テキストは手動で挿入された改行やコンテナの境界で折り返されます。
全角と半角で折返しの挙動が異なる場合がある
これが理由?
とくに,日本語の全角文字列 の場合は,
「一文字ごとに英文の半角スペースが挟まれているとみなした取り扱い」
という 特別な扱い になっていることになります。 (英文の場合 単語(word) が単位であるのに対して日本語では 文字(character) が単位です。)ref 半角だと折り返さないが、全角があると折り返す事例にぶつかったmrsekut.icon
こういうComponentで、unitに全角を入れる場合と半角を入れる場合
code:ts
type Props = React.ComponentProps<'input'> & {
unit?: string;
};
export const TextField = forwardRef<HTMLInputElement, Props>(
({ className, unit, ...props }, ref) => {
return (
<div className={cx(className, 'flex gap-1 border border-gray-300')}>
<input {...props} className="w-full px-4 py-2" ref={ref} />
{unit != null && (
<div className="flex items-center bg-white pr-4">
<span className="text-sm text-gray-500">
{/* <span className="whitespace-nowrap text-sm text-gray-500"> */}
{unit}
</span>
</div>
)}
</div>
);
},
);
半角のみを指定した場合は横に並ぶが、
全角が含まれると縦に並ぶ場合がある
コメントアウトしてる行を採用すれば直った
いまいち原因を理解していないmrsekut.icon